//路由鉴权：鉴权，项目当中路由能不能被的权限的设置（某一个路由在什么条件下可以访问、什么条件下不可以访问）
import router from "@/router";
import nprogrees from 'nprogress';
import setting from "./setting";
// 引入进度条样式
import "nprogress/nprogress.css";
nprogrees.configure({showSpinner:false})
// 引入用户相关的小仓库
import useUserStore from "./store/modules/user";
//引入大仓库
import Pinia from './store'
let useStore = useUserStore(Pinia);

// 全局守卫：显目当中任意路由切换都会触发的钩子
// 全局的前置守卫
router.beforeEach(async(to: any, from: any, next: any) => {
    // to：你将要访问那个路由
    // from：你从那个路由来
    // next：路由的放行函数
    nprogrees.start();

    // 获取用户的token
    let token = useStore.token
    //获取用户名字
    let username=useStore.username
    // 用户登录判断
    if (token) {
        //登录成功，访问login，不能访问，指向首页
        if (to.path == '/login') {
            next({ path: '/' })
        } else {
            // 登录成功访问其余六个路由（登录排除）
            // 有用户信息
            if (username) {
                // 放行
                next();
            }else{
                // 如果没有用户信息在这里发送请求获取到用户信息在放行
                try{
                    // 获取用户信息
                    await useStore.userInfo();
                    // 异步路由
                    // 方行
                    next({...to});//保证加载完毕之后再放行
                }catch(error){
                    // token过期|用户手动修改本地存储的token
                    // 退出登录->用户相关的数据清空
                    await useStore.userlogout();
                    next({path:'/login',query:{redirect:to.path}})
                }
            }
            next()
        }
    } else {
        // 用户未登录判断
        if (to.path == '/login') {
            next()
        } else {
            next({ path: '/login', query: { redirect: to.path } })
        }
    }
});
// 全局的后置守卫
router.afterEach((to: any, from: any) => {
    nprogrees.done();
    document.title=`${setting.title}-${to.meta.title}`
});
// 第一个问题：任意路由切换实现进度条业务——nprogrees
// 第二个问题：路由鉴权（路由组件访问权限的设置）
// 全部路由组件：登录|404|任意路由|首页|数据大屏|权限管理（三个子路由）|商品管理（四个子路由）
// 用户未登录：只能访问login其他全都不能访问
// 登陆成功：不可以访问login{指向首页}，其他都可以访问